Slack App を Socket Mode でつくって Heroku で動かす
ごあいさつ
ほいで、ちょっと欲張る気持ちがあって、同じように興味があった Slack Workflow に自作の Step を追加するのも試してみた。二兎を追うが二兎とも得るぞ! できあがったものは Heroku で動かせるとぼくにとっては楽なので、開発環境である手元の macOS と本番環境となる Heroku の両方でいい感じに動くアプリケーションを目指して作業を進めた。調べてみると、Slack が提供している Bolt という JavaScript のフレームワークを使うのが簡単そうだったので、ついでに Bolt の使い方も覚えることにした。三兎を追って三兎を得る作戦。心配。 hr.icon
できあがったサンプル
https://gyazo.com/186f03a7167afb04104ba60d609dcdce
Workflow Builder に自作の Step が登録されていて選択できる様子
https://gyazo.com/77e47dda538081e86b16aca8c7b0e8e6
おつかれシャワーへのおたよりを投稿するフォームを開き、それを GitHub の Issue に起こすという Workflow の例 https://gyazo.com/5652730594e8453e55f659a5e4100aaf
フォームに入力された内容を変数として使いながら、Issue のタイトルと概要文を組み立てることができる
https://gyazo.com/ee9879683997233656e8cd81b34ccb5f
実際に Workflow を起動してフォームに情報を入力して Submit すると
https://gyazo.com/b03d2d5f7c4c7cf48194fecca8c13deb
このように Issue が作成される
hr.icon
作業メモ
https://gyazo.com/65558b633fc4e41a9a01a7a5e1f1edc5
手元で起動したアプリケーションがそのまま Slack とやりとりしてくれるので、開発環境の準備がとても楽 実運用にあたっては「本番用 Slack App」と「開発用 Slack App」と、設定内容を揃えたふたつの Slack App を登録して活用するとよいだろう 環境変数とかで Bot Token と App Token を切り替えて環境を分離すればやっていけそう、という開発プロセスのイメージがついた
なので、特になにも考えなくてもデプロイしたら動く
ただ、Heroku で「これは Web Server です」と認識されると、起動から 60 秒以内に環境変数 PORT で指定される番号のポートを listen しないと R10 - Boot timeout というエラーが発生してアプリケーションが終了してしまう 今回のサンプル実装では Procfile で「これは websocket のプロセスですよ〜」と明示してやった フレームワークの Bolt はよくできていて、ドキュメントも充実しているし、Slack と連携するなにかをつくるときはこれを活用していくと捗ると思う Slack とのやりとりの部分はフレームワークにおまかせして、実現したい処理に集中できると感じた